home *** CD-ROM | disk | FTP | other *** search
- {*********************************************************}
- {* AAStrBld *}
- {* Copyright (c) Julian M Bucknall 2001 *}
- {* All rights reserved. *}
- {*********************************************************}
- {* Algorithms Alfresco: String builder class *}
- {*********************************************************}
-
- {Note: this unit is released as freeware. In other words, you are free
- to use this unit in your own applications, however I retain all
- copyright to the code. JMB}
-
- unit AAStrBld;
-
- interface
-
- uses
- SysUtils;
-
- type
- TaaStringBuilder = class
- {a class that efficiently builds strings character by character}
- private
- FBuffer : PByteArray;
- FCount : integer;
- FCapacity : integer;
- protected
- procedure sbGrow;
- public
- destructor Destroy; override;
-
- procedure Add(aCh : char);
- function AsString : string;
- end;
-
- implementation
-
- {===TaaStringBuilder=================================================}
- destructor TaaStringBuilder.Destroy;
- begin
- if (FCapacity <> 0) then
- FreeMem(FBuffer, FCapacity);
- inherited Destroy;
- end;
- {--------}
- procedure TaaStringBuilder.Add(aCh : char);
- begin
- if (FCapacity = FCount) then
- sbGrow;
- FBuffer^[FCount] := byte(aCh);
- inc(FCount);
- end;
- {--------}
- function TaaStringBuilder.AsString : string;
- begin
- if (FCount = 0) then
- Result := ''
- else begin
- SetLength(Result, FCount);
- Move(FBuffer^, Result[1], FCount);
- FCount := 0;
- end;
- end;
- {--------}
- procedure TaaStringBuilder.sbGrow;
- var
- NewBuffer : PByteArray;
- NewCap : integer;
- begin
- NewCap := FCapacity + 256;
- GetMem(NewBuffer, NewCap);
- if (FCapacity <> 0) then begin
- Move(FBuffer^, NewBuffer^, FCapacity);
- FreeMem(FBuffer, FCapacity);
- end;
- FBuffer := NewBuffer;
- FCapacity := NewCap;
- end;
- {====================================================================}
-
- end.
-